package design.pattern.template;

/**
 * 抽象类，定义模板方法和抽象方法
 *
 * @author AtoVio, Winter Yuan
 */
public abstract class FriedDish {

    // 定义模板方法
    public final void cook() {
        // 先倒油
        pureOil();
        // 再热油
        heatOil();
        // 再炒蔬菜
        pureVegetable();
        // 再加入调味料
        pourSauce();
        // 最后翻炒
        fry();
    }

    /**
     * 倒油
     */
    public void pureOil() {
        System.out.println("倒油");
    }

    /**
     * 热油方法
     */
    public void heatOil() {
        System.out.println("热油");
    }

    // 炒的蔬菜是不同的，不需要实现
    public abstract void pureVegetable();

    // 调味料也不一样
    public abstract void pourSauce();

    /**
     * 翻炒动作的实现方法
     */
    public void fry() {
        System.out.println("翻炒翻炒");
    }

}
